//这个是模板类
#include<iostream>
using namespace std;
template<typename T>
//声明
class Stack
{
public:
	Stack();
	~Stack();
	void push(T t);
	T pop();
	bool isEmpty();
private:
	T* m_pT;
	int	m_maxSize;
	int m_size;
};
//定义
template<typename T>
Stack<T>::Stack()
{
	m_maxSize = 100;
	m_size = 0;
	m_pT = new T[m_maxSize];
}

template<typename T>
Stack<T>::~Stack()
{
	delete[] m_pT;
	m_pT = nullptr;
}

template<typename T>
void Stack<T>::push(T t)
{
	m_size++;
	m_pT[m_size - 1] = t;
}

template<typename T>
T Stack<T>::pop()
{
	T t = m_pT[m_size - 1];
	m_size--;
	return t;
}

template<typename T>
bool Stack<T>::isEmpty()
{
	return m_size == 0;
}

int main(void)
{
    //int型
    Stack<float> a1;
    // cout << a.isEmpty() << endl;
    for(int i = 0; i < 10; i++)
    {
        a1.push((float)i/10);
    }
    // cout << a.isEmpty() << endl;
    for(int j = 0; j < 10; j++)
    {
        cout << a1.pop() << endl;
    }
    // cout << a.isEmpty() << endl;
    //float型
        Stack<int> a2;
    // cout << a.isEmpty() << endl;
    for(int i = 0; i < 10; i++)
    {
        a2.push(i);
    }
    // cout << a.isEmpty() << endl;
    for(int j = 0; j < 10; j++)
    {
        cout << a2.pop() << endl;
    }
    // cout << a.isEmpty() << endl;
    return 0;
}